﻿using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;


public partial class Default2 : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
           mvPatients.SetActiveView(vInsertPatient);
        }
    }
    protected void dvpatient_ItemInserted(object sender, DetailsViewInsertedEventArgs e)
    {
        gvPatients.DataBind();
    }

    protected void gvPatients_SelectedIndexChanged(object sender, EventArgs e)
    {
        mvPatients.SetActiveView(vEditPatient);
    }

    protected void lbtnCancel_Click(object sender, EventArgs e)
    {
        mvPatients.SetActiveView(vInsertPatient);
    }

    protected void lbUpdate_Click(object sender, EventArgs e)
    {
        mvPatients.SetActiveView(vInsertPatient);
    }

    protected void dvEditPatient_ItemUpdated(object sender, DetailsViewUpdatedEventArgs e)
    {
        gvPatients.DataBind();
    }

    protected void dvPatient_ItemUpdated(object sender, DetailsViewUpdatedEventArgs e)
    {
        gvPatients.DataBind();
    }
    protected void vInsertPatient_Load(object sender, EventArgs e)
    {
        //Page.ClientScript.RegisterStartupScript(this.GetType(), "CustomValidationTestForFirstName", "var txtTestForLength='" + this.txtEGN.ClientID + "';", true);
    }

    public void IsEgnValid(object source, ServerValidateEventArgs args)
    {
        string egn = args.Value;
        // проверяваме дали е въведена няква стойност
        if (string.IsNullOrEmpty(egn))
        {
            args.IsValid = false;
            return;
        }

        // проверяваме дали низът се състои точно от 10 символа
        if (egn.Length != 10)
        {
            args.IsValid = false;
            return;
        }

        // проверяваме дали низът се състои само от цифри
        double num;

        if (!double.TryParse(egn, out num))
        {
            args.IsValid = false;
            return;
        }

        // низът е проверен, слователно пристъпваме към главната задача
        int[] weights = { 2, 4, 8, 5, 10, 9, 7, 3, 6 };
        string date = string.Empty;
        DateTime dt;

        // първите две цифри указват годината на раждане
        int year = Int16.Parse(egn.Substring(0, 2));

        // вторите две цифри указват месеца
        int month = Int16.Parse(egn.Substring(2, 2));

        // третите две цифри указват деня
        int day = Int16.Parse(egn.Substring(4, 2));

        if (month > 40)
        {
            date = (month - 40) + "-" + day + "-" + (year + 2000);
        }
        else if (month > 20)
        {
            date = (month - 20) + "-" + day + "-" + (year + 1800);
        }
        else
        {
            date = month + "-" + day + "-" + (year + 1900);
        }

        if (DateTime.TryParse(date, out dt) == false)
        {
            args.IsValid = false;
            return;
        }

        int checkSum = Int32.Parse(egn.Substring(9, 1));
        int egnSum = 0;
        int validCheckSum = 0;

        for (int i = 0; i < 9; i++)
        {
            egnSum += int.Parse(egn.Substring(i, 1)) * weights[i];
        }

        validCheckSum = egnSum % 11;

        if (validCheckSum == 10) { validCheckSum = 0; }

        if (checkSum == validCheckSum)
        {
            args.IsValid = true;
            return;
        }
        else
        {
            args.IsValid = false;
            return;
        }
    }
}
